﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Negocio;

public partial class Administracion_frmArticuloABM : System.Web.UI.Page
{
    Articulo objeto;
    EstadoABM estadoABM;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            SetModo(EstadoABM.Seleccionar);
            CargarControles();
            CargarGrilla(Articulo.ObtenerTodos());
        }
        else
        {
            if (Session["ArticuloABM"] != null)
            {
                objeto = (Articulo)Session["ArticuloABM"];
            }
        }
    }
    protected void butNuevo_Click(object sender, EventArgs e)
    {
        Limpiar();
        objeto = new Articulo();
        SetModo(EstadoABM.Modificar);
        txtCodigo.Focus();
        Session["ArticuloABM"] = objeto;
    }
    protected void butModificar_Click(object sender, EventArgs e)
    {
        SetModo(EstadoABM.Modificar);
        txtCodigo.Enabled = false;
        txtNombre.Focus();
    }
    protected void butEliminar_Click(object sender, EventArgs e)
    {
        objeto.Borrar();
        objeto.Persistir();
        objeto = null;
        Limpiar();
        SetModo(EstadoABM.Seleccionar);
        CargarGrilla(Articulo.ObtenerTodos());
    }
    protected void butAceptar_Click(object sender, EventArgs e)
    {
        CopiarDatos();
        objeto.Persistir();
        CargarObjetoConModoVer();
        CargarGrilla(Articulo.ObtenerTodos());
    }
    protected void butCancelar_Click(object sender, EventArgs e)
    {
        if (objeto.Nuevo)
        {
            Limpiar();
            SetModo(EstadoABM.Seleccionar);
        }
        else
        {
            CargarObjetoConModoVer();
        }
    }

    #region Funciones Protected

    protected void Limpiar()
    {
        txtCodigo.Text = string.Empty;        
        txtNombre.Text = string.Empty;
        txtCosto.Text = string.Empty;
        txtStock.Text = string.Empty;                        
        txtObservacion.Text = string.Empty;
    }

    protected void CargarObjetoConModoVer()
    {
        txtCodigo.Text = objeto.Id;
        txtNombre.Text = objeto.Nombre;
        txtCosto.Text = objeto.Precio.ToString();
        txtStock.Text = objeto.Stock.ToString();
        txtObservacion.Text = objeto.Observacion;        
        SetModo(EstadoABM.Ver);
    }

    protected void CopiarDatos()
    {
        objeto.Id = txtCodigo.Text;        
        objeto.Nombre = txtNombre.Text;
        objeto.Precio = Convert.ToDecimal( txtCosto.Text);
        objeto.Stock = Convert.ToInt32( txtStock.Text);        
        objeto.Observacion = txtObservacion.Text;
    }


    protected void HabilitarControles(bool enable)
    {
        txtCodigo.Enabled = enable;        
        txtNombre.Enabled = enable;
        txtCosto.Enabled = enable;
        txtStock.Enabled = enable;        
        txtObservacion.Enabled = enable;
    }


    protected void CargarControles()
    {
        Delivery hdMaster = (Delivery)this.Master;
        ((Label)hdMaster.FindControl("lblTitulo")).Text = this.Title;
    }

    protected void CargarGrilla(List<Articulo> Articulos)
    {
        grvDatos.DataSource = Articulos;
        string[] keys = { "id" };
        grvDatos.DataKeyNames = keys;
        grvDatos.DataBind();
    }

    protected void SetModo(EstadoABM estado)
    {
        estadoABM = estado;
        switch (estado)
        {
            case EstadoABM.Seleccionar:
                //Habilitar solo Nuevo
                butAceptar.Enabled = false;
                butCancelar.Enabled = false;
                butNuevo.Enabled = true;
                butModificar.Enabled = false;
                butEliminar.Enabled = false;
                HabilitarControles(false);
                break;

            case EstadoABM.Ver:
                //Habilitar solo Nuevo, Modificar y Eliminar
                butAceptar.Enabled = false;
                butCancelar.Enabled = false;
                butNuevo.Enabled = true;
                butModificar.Enabled = true;
                butEliminar.Enabled = true;
                HabilitarControles(false);
                break;

            case EstadoABM.Modificar:
                //Habilitar solo Aceptar y Cancelar
                butAceptar.Enabled = true;
                butCancelar.Enabled = true;
                butNuevo.Enabled = false;
                butModificar.Enabled = false;
                butEliminar.Enabled = false;
                HabilitarControles(true);
                break;
            default:
                break;
        }
    }
    protected enum EstadoABM
    {
        Ver,
        Modificar,
        Seleccionar
    }
    #endregion
    protected void grvDatos_SelectedIndexChanged(object sender, EventArgs e)
    {
        objeto = Articulo.ObtenerPorId(grvDatos.SelectedDataKey[0].ToString());
        CargarObjetoConModoVer();
        Session["ArticuloABM"] = objeto;
    }
    protected void grvDatos_PageIndexChanged(object sender, EventArgs e)
    {

    }
    protected void grvDatos_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        grvDatos.PageIndex = e.NewPageIndex;
        CargarGrilla(Articulo.ObtenerTodos());
    }
    protected void butBuscar_Click(object sender, EventArgs e)
    {
        if (txtFiltroArticulo.Text != string.Empty)
        {
            CargarGrilla(Articulo.ObtenerPorFiltro(TxtCodigoFiltro.Text, txtFiltroArticulo.Text));
        }
        else
        {
            CargarGrilla(Articulo.ObtenerTodos());
        }
    }
}
